home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #288 (1993)(Rhein-Sieg-Soft).adf
/
Knobeln
/
MINIMAX.LST
< prev
next >
Wrap
File List
|
1992-10-09
|
10KB
|
307 lines
' *********************************
' * MiniMax V 1.07 *
' * © 8.10.1992 by Henry könig *
' * Bornheide 71, 2000 Hamburg 53 *
' *********************************
init
anleitung
game:
programmkopf
CLEAR ! Variablen löschen
init.spiel
spielen ! zur Spiel-Prozedur
PROCEDURE anleitung
programmkopf
PRINT AT(1,5);"MiniMax ist ein kleines Strategiespiel mit Zahlen."
PRINT
PRINT "Auf einem Spielbrett, das in je acht Zeilen und Spalten eingeteilt ist,"
PRINT
PRINT "müssen Zahlen aus einer senkrecht markierten Spalte ausgewählt werden."
PRINT
PRINT "Der Punktestand wird um diese Zahl erhöht und die Zahl aus dem Spielfeld"
PRINT
PRINT "entfernt. Die ausgewählte Zahl bestimmt die waagerechte Reihe aus welcher der"
PRINT
PRINT "Computer wählen darf. Das Spiel ist beendet, wenn alle Felder gelöscht sind"
PRINT
PRINT "oder wenn kein Spieler in der aktuellen Spalte oder Reihe ein Feld mehr wählen"
PRINT
PRINT "kann. Gewinner ist der, der den höchsten Punktestand erreicht."
PRINT
PRINT "Durch eine 'Ja/Nein'-Abfrage kann ein neues Spiel begonnen werden."
PRINT
PRINT "Das Spiel kann jederzeit durch das Anklicken des Endeschalters abgebrochen"
PRINT
PRINT "werden."
urheber
tastendruck
RETURN
PROCEDURE beenden ! Programm beenden
CLOSEW #1 ! Fenster schließen
CLOSES 1 ! Bildschirm schließen
END ! und zur Workbench
RETURN
PROCEDURE computer.spielt
CLR j% ! Spaltenzähler löschen
FOR i%=1 TO 8
IF feld%(i%,ze%)=0 THEN ! Feld ist leer
j%=j%+1 ! Feld plus 1
ENDIF
NEXT i%
IF j%=8 THEN ! alle Felder leer
ende ! Spielstand anzeigen und ende
ENDIF
FOR i%=1 TO 8 !
a%(i%)=0
FOR j%=1 TO 8
IF j%=ze% THEN
j%=j%+1
ENDIF
IF j%<9 THEN
IF feld%(i%,j%)=>a%(i%) THEN
a%(i%)=feld%(i%,j%)
ENDIF
ENDIF
NEXT j%
NEXT i%
j%=1
FOR i%=1 TO 8
a%(i%)=feld%(i%,ze%)-a%(i%)
NEXT i%
FOR i%=2 TO 8
IF a%(j%)<a%(i%) THEN
j%=i% ! nächste Spalte
ENDIF
NEXT i%
mz%=feld%(j%,ze%) ! Punkte des Feldes merken
mp%=mp%+mz% ! Computerpunkte addieren
feld%(j%,ze%)=0 ! Feld löschen
spa%=j% ! aktuelle Spalte übergeben
punktestand ! Punktestand anzeigen
ze%=INT(y1%/8)+ze%*2 ! Zeile berechnen
j%=2+j%*4
PRINT AT(j%,ze%);" " ! Spielfeld löschen
RETURN
PROCEDURE ende ! Spielstand ausgeben
PCOLOR 3,0
PRINT AT(45,8);"Das Spiel ist zu Ende!"
PCOLOR 1,0
IF mp%>dp% THEN ! Computerpunkte > Spielerpunkte
PRINT AT(40,12);"Ich habe mit ";mp%;" zu ";dp%;" gewonnen."
ELSE IF mp%=dp%
PRINT AT(40,12);" Wir sind gleich gut"
ELSE IF mp%<dp%
PRINT AT(40,12);" Du hast mit ";dp%;" zu ";mp%;" gewonnen."
ENDIF
PCOLOR 5,0
PRINT AT(45,20);"Noch ein Spiel mit J/N ";
PCOLOR 1,0
x$=""
taste
IF UPPER$(x$)="J" THEN ! Ja
RESUME game ! neuse Spiel
ENDIF
beenden ! Programm beenden
RETURN
PROCEDURE falsch ! falschen Zug anmeckern
PRINT CHR$(7); ! Bildschirmblitz
CLR mausk% ! Mausposition löschen
RETURN
PROCEDURE farben.setzen
SETCOLOR 0,5,5,5 ! grau statt blau
SETCOLOR 1,15,15,15 ! weiß bleibt
SETCOLOR 2,0,0,0 ! schwarz erhalten
SETCOLOR 3,15,5,0 ! rot bleibt
SETCOLOR 4,10,10,10 ! hellgrau inverse Farbe im Filerequester
SETCOLOR 5,15,15,0 ! gelb
SETCOLOR 6,0,0,0 ! schwarz = Inverse Farbe im Filerequester
RETURN
PROCEDURE init
breite%=640 ! Bildschirmbreite
hoehe%=256 ! Bildschirmhöhe
ebenen%=3 !
OPENS 1,0,0,breite%,hoehe%,ebenen%,&H8000
OPENW #1,0,0,breite%,hoehe%,&H18,&H1800,1
farben.setzen ! Farbpalette setzen
RETURN
PROCEDURE init.spiel
x1%=27 ! linker Spielfeldrand
x2%=283 ! rechter Spielfeldrand
y1%=11+32 ! oberer Spielfeldrand
y2%=139+32 ! unterer Spielfeldrand
x3%=18*8 ! Endeschalter links
x4%=x3%+4*8
y3%=23*8 ! Endeschalter Oberkante
y4%=y3%+8
DIM feld%(8,8)
DIM a%(8)
RANDOMIZE TIMER
FOR i%=1 TO 8
FOR j%=1 TO 8
x%=1+i%*4
y%=INT(y1%/8)+j%*2
sp%=INT(RND*99+1) ! Feldwert per Zufall bestimmen
PRINT AT(x%,y%);SPC(3-LEN(STR$(sp%)));sp%
feld%(i%,j%)=sp% ! Feldwert merken
NEXT j%
NEXT i%
zeichne.schalter(x1%-16,y1%-7,x2%+14,y2%+7,0)
zeichne.schalter(x1%-14,y1%-6,x2%+12,y2%+6,1)
COLOR 3
j%=y1%
FOR i%=x1% TO x2% STEP 32 ! Spielfeld zeichnen
LINE i%,y1%,i%,y2%
LINE x1%,j%,x2%,j%
j%=j%+16
NEXT i%
zeichne.schalter(x3%-16,y3%-6,x4%+16,y4%+8,0)
COLOR 3
TEXT x3%,y3%+8,"Ende"
COLOR 1
punktestand ! Punktestand anzeigen
urheber
RETURN
PROCEDURE punktestand ! Punktestand ausgeben
PRINT AT(4,28);"Meine Punkte: ";
PCOLOR 5,0
PRINT mp%
PCOLOR 1,0
PRINT AT(24,28);"Mein Zug: ";
PCOLOR 5,0
PRINT mz%
PCOLOR 1,0
PRINT AT(44,28);"Deine Punkte: ";
PCOLOR 5,0
PRINT dp%
PCOLOR 1,0
RETURN
PROCEDURE reihe.einrahmen
FOR i%=y1% TO y2%-16 STEP 16
BOX sp%,i%+1,sp%+30,i%+15
BOX sp%+1,i%+2,sp%+29,i%+14
NEXT i%
RETURN
PROCEDURE spielen ! Spielen
spa%=INT(RND*8+1) ! 1. Spielspalte ermitteln
x%=RND*100 ! 1. Spieler ermitteln
IF x%>60 THEN
ze%=spa% ! aktiver Spieler
computer.spielt ! Amiga fängt an
ENDIF
CLR j% ! Eingangswert für die Schleife
WHILE j%<>8
sp%=(spa%-1)*32+28 ! aktuelle Spalte
CLR j%
COLOR 2 ! schwarz
reihe.einrahmen ! Spielreihe einrahmen
FOR i%=1 TO 8
IF feld%(spa%,i%)=0 THEN ! Spielfeld ist leer
j%=j%+1
ENDIF
NEXT i%
IF j%=8 THEN ! keine Reihe mehr wählbar
ende ! Spielstand anzeigen
ELSE
spieler ! Spieler ist am Zug
dp%=dp%+feld%(x%,y%) ! Spielerpunkte addieren
feld%(x%,y%)=0 ! Feld als gespielt kennzeichnen
ze%=y%
x%=2+x%*4
y%=INT(y1%/8)+y%*2 ! Zeile berechnen
PRINT AT(x%,y%);" " ! Spielfeld löschen
punktestand ! Punktestand anzeigen
COLOR 0
reihe.einrahmen ! Spielreihe einrahmen
comp:
computer.spielt ! Amiga ist am Zug
ENDIF
WEND
RETURN
PROCEDURE spieler ! Spieler ist am Zug
CLR mausk% ! Mausknopf löschen
WHILE mausk%=0
mausk%=MOUSEK ! Mausknopf abfragen
IF mausk%<>0 THEN
x%=MOUSEX ! Mausposition Rechtswert
y%=MOUSEY ! Mausposition Hochwert
IF x%<x1% OR x%>x2% OR y%<y1% OR y%>y2% THEN
falsch ! falschen Zug anmeckern
ELSE
x%=INT((x%-x1%)/32+1) ! waagerechter Feld berechnen
y%=INT((y%-y1%)/16+1) ! senkrechtes Feld berechnen
IF feld%(x%,y%)=0 OR x%<>spa% THEN ! Feld leer oder falsche Spalte
falsch ! falschen Zug anmeckern
ENDIF
ENDIF
IF x%>x3% AND x%<x4% AND y%>y3% AND y%<y4% THEN ! Endeschalter angeklickt
beenden ! Spiel beenden
ENDIF
ENDIF
WEND
RETURN
PROCEDURE programmkopf
CLS ! Bildschirm löschen
COLOR 2 ! schwarz
PBOX 1,1,639,21 ! Box zeichnen
COLOR 0 ! grau
PBOX 4,3,636,19 ! Box zeichnen
zeichne.schalter(1,1,639,21,1)
PCOLOR 5,0 ! gelbe Schrift
PRINT AT(23,2);"MiniMax V 1.06"
PCOLOR 1,0 ! weiße Schrift
programmfuss
RETURN
PROCEDURE programmfuss ! Anweisungsboxen zeichnen
COLOR 2 ! schwarz
PBOX 1,208,639,254 ! schwarze Box
COLOR 0,0 ! grau
PBOX 6,(27*8)-5,633,(28*8)+4 ! 1. graue Box
PBOX 6,(29*8)+2,633,251 ! 2. graue Box
zeichne.schalter(5,209,633,230,1)! 1. Schalter
zeichne.schalter(5,233,633,253,0)! 2. Schalter
RETURN
PROCEDURE taste ! ein Zeichen von der Tastatur holen
CLR x% ! Steuerzeichen löschen
CLR mausk%
CLR mausx% ! Mausspalte löschen
CLR mausy% ! Mauszeile löschen
WHILE x%=0 AND MOUSEK=0
x$=INKEY$ ! Zeichen von Tastatur
x%=ASC(x$) ! ASCII-Wert für Auswertung
WEND
IF MOUSEK<>0 THEN ! linke Maustaste
mausx%=INT(MOUSEX/8)+1 ! ja, dann Spalte = mausx
mausy%=INT(MOUSEY/8)+1 ! Zeile = mausy
mausk%=MOUSEK ! Maustaste
ENDIF
RETURN
PROCEDURE tastendruck
PRINT AT(4,28);SPACE$(74);
PCOLOR 5,0
PRINT AT(18,28);" Weiter mit beliebiger Taste oder Mausklick."
GOSUB taste
PCOLOR 1,0
PRINT AT(4,28);SPACE$(74)
RETURN
PROCEDURE urheber
PRINT AT(14,31);"© 1992 by Henry König, Bornheide 71, 2000 Hamburg 53"
RETURN
PROCEDURE zeichne.schalter(sx1%,sy1%,sx2%,sy2%,an%)
IF an% THEN
schatten%=2
licht%=4
ELSE
schatten%=4
licht%=2
ENDIF
COLOR 2 ! schwarz
COLOR 0 ! grau
COLOR licht% ! hellgrau oder schwarz
LINE sx1%+8,sy2%-4,sx2%-7,sy2%-4 ! untere Lichtlinien
LINE sx2%-7,sy1%+5,sx2%-7,sy2%-4 ! rechte Lichtlinie
COLOR schatten% ! schwarz oder hellgrau
LINE sx1%+8,sy1%+4,sx2%-7,sy1%+4 ! obere Schatttenlinie
LINE sx1%+8,sy1%+4,sx1%+8,sy2%-4 ! linke Schattenlinie
RETURN
REM